home *** CD-ROM | disk | FTP | other *** search
- /* gmplayer.h
- *
- * Generic Module Player
- *
- * $Id: gmplayer.h,v 1.9 1996/10/06 16:48:10 pekangas Exp $
- *
- * Copyright 1996 Petteri Kangaslampi and Jarno Paananen
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
- #ifndef __GMPLAYER_H
- #define __GMPLAYER_H
-
-
- #define MAXSONGS 16 /* maximum number of songs played
- simultaneously */
-
-
-
- /****************************************************************************\
- * enum gmpCommands
- * ----------------
- * Description: Command numbers for module commands
- \****************************************************************************/
-
- enum gmpCommands
- {
- gmpcNone = 0, /* no command */
- gmpcArpeggio = 1, /* arpeggio */
- gmpcSlideUp = 2, /* period slide up */
- gmpcSlideDown = 3, /* period slide down */
- gmpcTonePortamento = 4, /* tone portamento */
- gmpcVibrato = 5, /* vibrato */
- gmpcTPortVSlide = 6, /* tone portamento + volume slide */
- gmpcVibVSlide = 7, /* vibrato + volume slide */
- gmpcTremolo = 8, /* tremolo */
- gmpcSetPanning = 9, /* set panning (PT cmd 8) */
- gmpcSampleOffset = 10, /* set sample offset */
- gmpcVolumeSlide = 11, /* volume slide */
- gmpcPositionJump = 12, /* position jump */
- gmpcSetVolume = 13, /* set volume */
- gmpcPatternBreak = 14, /* pattern break (to a row) */
- gmpcSetSpeed = 15, /* set speed */
- gmpcSetTempo = 16, /* set tempo in BPM */
- gmpcFineSlideUp = 17, /* fine period slide up */
- gmpcFineSlideDown = 18, /* fine period slide down */
- gmpcPatternLoop = 19, /* pattern loop set/loop */
- gmpcSetPanning16 = 20, /* set 16-point panning value */
- gmpcPTRetrig = 21, /* Protracker-style retrig note */
- gmpcFineVolSlideUp = 22, /* fine volume slide up */
- gmpcFineVolSlideDown = 23, /* fine volume slide down */
- gmpcNoteCut = 24, /* note cut */
- gmpcNoteDelay = 25, /* note delay */
- gmpcPatternDelay = 26, /* pattern delay */
- gmpcSetMVolume = 27, /* set master volume */
- gmpcMVolSlide = 28, /* master volume slide */
- gmpcS3MRetrig = 29, /* S3M retrig note */
- gmpcMusicSync = 30, /* music synchronization command */
- gmpcExtraFineSlideUp = 31, /* extra fine period slide up */
- gmpcExtraFineSlideDown = 32, /* extra fine period slide down */
- gmpcPanSlide = 33, /* panning slide */
- gmpNumCommands /* total number of commands */
- /* Hack for Watcom C 10.0: */
- #define GMP_NUM_COMMANDS 34
- };
-
-
-
- /****************************************************************************\
- * enum gmpPlayModes
- * -----------------
- * Description: Generic Module Player playing modes - affects command
- * implementation and other tracker compatibility issues
- \****************************************************************************/
-
- enum gmpPlayModes
- {
- gmpPT = 1, /* Protracker compatibility mode */
- gmpST3, /* Scream Tracker 3 mode */
- gmpFT2 /* Fast Tracker 2 mode */
- };
-
-
-
-
- /****************************************************************************\
- * struct gmpSample
- * ----------------
- * Description: Generic Module Player sample in memory
- \****************************************************************************/
-
- typedef struct
- {
- char name[32]; /* sample name */
- unsigned sdHandle; /* Sound Device sample handle */
- uchar *sample; /* sample data pointer, NULL if sample
- data only in SD memory */
- unsigned sampleLength; /* sample length */
- uchar sampleType; /* sample type, see enum
- sdSampleType */
- uchar loopMode; /* sample looping mode, see enum
- sdLoopMode */
- uchar loop1Type; /* first loop type, see enum
- sdLoopType */
- uchar loop2Type; /* second loop type, see enum
- sdLoopType */
- unsigned loop1Start; /* first loop start */
- unsigned loop1End; /* first loop end */
- unsigned loop2Start; /* second loop start */
- unsigned loop2End; /* second loop end */
- unsigned volume; /* sample volume */
- int panning; /* sample panning position */
- long baseTune; /* base tune */
- int finetune; /* fine tuning value */
- ulong fileOffset; /* sample start offset in module
- file */
- } gmpSample;
-
-
-
-
- /****************************************************************************\
- * struct gmpEnvelope
- * ------------------
- * Description: Envelope information for one instrument envelope (volume or
- * panning)
- \****************************************************************************/
-
- typedef struct
- {
- uchar numPoints; /* number of points in envelope */
- signed char sustain; /* sustain point number, -1 if no
- sustain is used */
- signed char loopStart; /* envelope loop start point number,
- -1 if no loop */
- signed char loopEnd; /* envelope loop end point number, -1
- if no loop */
- signed short points[24]; /* envelope points: a maximum of 12
- points, in (X,Y) coordinate
- pairs */
- } gmpEnvelope;
-
-
-
-
- /****************************************************************************\
- * struct gmpInstrument
- * --------------------
- * Description: Generic Module Player instrument in memory
- \****************************************************************************/
-
- typedef struct
- {
- char name[32]; /* instrument name */
- unsigned numSamples; /* number of samples */
- uchar *noteSamples; /* sample numbers for all keyboard
- notes, NULL if sample 0 is used
- for all (always 96 bytes) */
- gmpEnvelope *volEnvelope; /* pointer to volume envelope info or
- NULL if volume envelope is not
- used */
- gmpEnvelope *panEnvelope; /* pointer to panning envelope info or
- NULL if panning envelope is not
- used */
- int volFadeout; /* FT2 volume fade-out speed */
- uchar vibType; /* FT2 auto-vibrato type */
- uchar vibSweep; /* FT2 auto-vibrato sweep value */
- uchar vibDepth; /* FT2 auto-vibrato depth */
- uchar vibRate; /* FT2 auto-vibrato rate */
- int used; /* 1 if instrument is used, 0 if not.
- Unused instruments are not loaded
- or added to Sound Device */
- gmpSample samples[EMPTYARRAY]; /* samples */
- } gmpInstrument;
-
-
-
-
- /****************************************************************************\
- * struct gmpPattern
- * -----------------
- * Description: One Generic Module Player pattern in memory
- \****************************************************************************/
-
- typedef struct
- {
- unsigned length; /* pattern size in bytes, INCLUDING
- this header */
- unsigned rows; /* number of rows in pattern */
- uchar data[EMPTYARRAY]; /* pattern data */
-
- /* The pattern data is built as follows:
- The first byte is compression information byte. Bits 0-4 form the
- channel number (0-31) and bits 5-7 compression info:
- bit 5 if 1, note and instrument number bytes follow
- bit 6 if 1, volume column byte follows
- bit 7 if 1, command and infobyte bytes follow
- If the compression infobyte is 0, it marks the end of the current
- row. Possible other data follows the compression information byte in
- the following order: note, instrument, volume, command, infobyte.
-
- In note numbers the upper nybble is the octave number, and lower
- nybble note number in octave. So, for example, D#2 becomes 0x23.
- 0xFE as a note number represents a release note, and 0xFF no new
- note as does 0xFF as an instrument number. Valid instrument numbers
- range from 0 to 254 inclusive.
-
- This isn't quite as efficient as it could be, but is very simple and
- fast to process, and compresses most pattern data very efficiently
- anyway.
- */
-
- } gmpPattern;
-
-
-
-
- /****************************************************************************\
- * struct gmpModule
- * ----------------
- * Description: Generic Module Player module in memory
- \****************************************************************************/
-
- typedef struct
- {
- uchar name[32]; /* module name */
- int playMode; /* module playing mode - see enum
- gmpPlayMode */
- unsigned songLength; /* song length */
- unsigned restart; /* song restart position */
- unsigned numInsts; /* number of instruments */
- unsigned numPatts; /* number of patterns */
- uchar numChannels; /* number of channels in module */
- uchar masterVolume; /* initial master volume */
- uchar speed; /* initial speed */
- uchar tempo; /* initial BPM tempo */
- int *panning; /* initial channel panning
- positions */
- ushort *songData; /* song data - pattern playing
- order */
- gmpInstrument **instruments; /* instrument data */
- gmpPattern **patterns; /* pattern data */
- struct /* Format-specific playing information flags: */
- {
- int ptLimits : 1; /* ST3: Protracker limits */
- int fastVolSlides : 1; /* ST3: Fast volume slides */
- int extOctaves : 1; /* PT: Extended octaves needed */
- int linFreqTable : 1; /* FT2: Linear frequency table used */
- } playFlags;
- } gmpModule;
-
-
-
-
- /****************************************************************************\
- * struct gmpChannel
- * -----------------
- * Description: Generic Module Player internal channel structure
- \****************************************************************************/
-
- typedef struct
- {
- unsigned period; /* current playing period */
- int instrument; /* current playing instrument, -1 if
- no instrument has been set */
- int newInstrument; /* new instrument number */
- unsigned tpDest; /* tone portamento destination */
- unsigned startOffset; /* next note start offset */
-
- uchar sample; /* current playing sample, 0xFF if
- there is no sample */
- uchar sdChannel; /* Sound Device channel number */
- uchar volColumn; /* volume column value */
- uchar note; /* current note number, 0xFF if there
- is no note */
-
- int oldInfo; /* previous non-zero info byte */
-
- uchar oldInfobytes[gmpNumCommands]; /* Old infobytes for all
- commands */
- /* Align structure: */
- #if (GMP_NUM_COMMANDS % 4)
- uchar oldInfoFiller[4 - (GMP_NUM_COMMANDS % 4)];
- #endif
-
- uchar volume; /* current volume */
- uchar command; /* current command number */
- uchar infobyte; /* current command infobyte */
- uchar tpSpeed; /* tone portamento speed */
-
- uchar realVolume; /* sound device volume (for envelopes) */
- uchar volSustained; /* volume envelope sustained */
- uchar panSustained; /* panning envelope sustained */
-
- uchar fill;
-
- int panning; /* current panning */
-
- int volEnvX; /* volume envelope X-position */
- int panEnvX; /* panning envelope X-position */
-
- long fadeOut; /* fade out value */
-
- uchar keyOff; /* there has been a key off -note */
- uchar retrigCount; /* note retrig counter */
- uchar trueVolume; /* ;) */
- uchar prevNote; /* previous real note value (the one
- that might be playing), 0xFF if
- no note has been played */
-
- uchar vibSpeed; /* vibrato speed */
- uchar vibDepth; /* vibrato depth */
- uchar vibPos; /* vibrato position */
- uchar smpOffset; /* sample offset infobyte */
-
- int realPeriod; /* final period value */
- int truePeriod; /* final final period value */
-
- int autoVibDepth; /* auto vibrato depth */
- uchar autoVibPos; /* auto vibrato position */
-
- uchar loopRow; /* pattern loop start row (PT mode) */
- uchar loopCount; /* pattern loop count (PT mode) */
- uchar volSlideInfobyte; /* volume slide old infobyte */
-
- struct /* Channel status flag bits: */
- {
- int newNote : 1; /* there is a new note number */
- int newVolume : 1; /* there is a new volume column
- value */
- int newInst : 1; /* there is a new instrument number */
- int command : 1; /* there is a valid command */
- int noteDelay : 1; /* note delay is active */
- #ifdef __16__
- int fillerb : 11; /* make sure all word fields really */
- #else /* do get aligned to word boundaries*/
- int fillerb : 27; /* (either 32 or 16 bits) */
- #endif
- } status;
- } gmpChannel;
-
-
-
-
- /****************************************************************************\
- * struct gmpInformation
- * ---------------------
- * Description: Generic Module Player information structure, used by
- * gmpGetInformation().
- \****************************************************************************/
-
- typedef struct
- {
- unsigned position; /* current playing position */
- unsigned pattern; /* current pattern number */
- unsigned row; /* current row in pattern */
- unsigned tempo; /* current tempo in BPM */
- unsigned speed; /* current playing speed */
- int syncInfo; /* latest music synchronization
- command infobyte or -1 if no
- synchronization commands yet */
- gmpChannel *channels; /* pointer to channel information
- structures. DO NOT MODIFY these! */
- } gmpInformation;
-
-
-
-
- /****************************************************************************\
- * struct gmpPlayStatus
- * --------------------
- * Description: Generic Module Player internal playing status structure. Used
- * to enable playing several songs at the same time.
- \****************************************************************************/
-
- typedef struct
- {
- unsigned handleNum; /* playing handle number for this
- status struct in GMP internal
- table */
- gmpModule *module; /* currently playing module */
- uchar *playPtr; /* pointer to current pattern data
- playing position */
- unsigned position; /* current song position */
- unsigned pattern; /* current pattern number */
- unsigned row; /* current pattern row number */
- unsigned songEnd; /* song end position */
- unsigned restartPos; /* song restart position */
- unsigned tempo; /* current tempo in BPM */
- unsigned speed; /* current playing speed */
- unsigned playCount; /* playing counter - pattern data is
- processed when playCount >= speed
- */
- unsigned pattDelayCount; /* pattern delay counter */
- unsigned numChannels; /* number of channels to be played */
- unsigned perLimitUp; /* upper period limit for playing */
- unsigned perLimitLow; /* lower period limit for playing */
- unsigned perMultiplier; /* multiplier for period values */
- unsigned volLimit; /* upper volume limit */
-
- uchar loopRow; /* pattern loop start row */
- uchar loopCount; /* pattern loop count */
- uchar masterVolume; /* master volume */
- uchar filler;
-
- gmpChannel *channels; /* GMP channel structures */
- gmpInformation *information; /* GMP information structure */
- void (CALLING *SyncCallback)(unsigned syncNum, unsigned position,
- unsigned row); /* music synchronization callback
- function */
- int syncInfo; /* latest music synchronization
- command infobyte or -1 if no
- synchronization commands yet */
- } gmpPlayStatus;
-
-
-
-
- /****************************************************************************\
- * typedef gmpPlayHandle
- * ---------------------
- * Description: Generic Module Player playing handle
- \****************************************************************************/
-
- typedef gmpPlayStatus* gmpPlayHandle;
-
-
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpInit(SoundDevice *SD);
- *
- * Description: Initializes Generic Module Player
- *
- * Input: SoundDevice *SD Pointer to the Sound Device that will
- * be used for playing the music
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpInit(SoundDevice *SD);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpClose(void);
- *
- * Description: Uninitializes Generic Module Player
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpClose(void);
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetUpdRateFunct(int (*SetUpdRate)(unsigned updRate));
- *
- * Description: Changes the function that will be used to change the playing
- * update rate. Every time song tempo changes, SetUpdRate()
- * will be called with the new player tick rate (in 100*Hz).
- *
- * Input: int (*SetUpdRate)(unsigned updRate) Pointer to updating rate
- * changing function.
- *
- * Returns: MIDAS error code
- *
- * Notes: SetUpdRate usually points to tmrSetUpdRate(). GMPlayer
- * automatically sets the correct updating rate to the Sound
- * Device used.
- *
- \****************************************************************************/
-
- int CALLING gmpSetUpdRateFunct(int (CALLING *_SetUpdRate)(unsigned updRate));
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpPlaySong(gmpModule *module, int startPos, int endPos,
- * int restartPos, int numChannels, unsigned *sdChannels,
- * gmpPlayHandle *playHandle)
- *
- * Description: Starts playing a song from a module
- *
- * Input: gmpModule *module pointer to module to be played
- * int startPos song start position
- * int endPos song end position
- * int restartPos song restart position
- * int numChannels number of channels to be played
- * unsigned *sdChannels pointer to an array of Sound Device
- * channel numbers for all channels that
- * are required for playing
- * gmpPlayHandle *playHandle pointer to GMP playing handle
- *
- * Returns: MIDAS error code. Playing handle for this song is written to
- * *playHandle.
- *
- * Notes: To play the whole module, set startPos, endPos, restartPos and
- * numChannels to -1.
- *
- \****************************************************************************/
-
- int CALLING gmpPlaySong(gmpModule *module, int startPos, int endPos,
- int restartPos, int numChannels, unsigned *sdChannels,
- gmpPlayHandle *playHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpStopSong(gmpPlayHandle playHandle)
- *
- * Description: Stops playing a song
- *
- * Input: gmpPlayHandle playHandle playing handle returned by
- * gmpPlaySong().
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpStopSong(gmpPlayHandle playHandle);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpPlay(void)
- *
- * Description: Plays music for one song tick.
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING gmpPlay(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpFreeModule(gmpModule *module)
- *
- * Description: Deallocates a module structure allocated by a module loader
- *
- * Input: gmpModule *module module to be deallocated
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpFreeModule(gmpModule *module);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpLoadMOD(char *fileName, int addSD, mpModule **module)
- *
- * Description: Loads a Protracker module to memory in Generic Module Player
- * module format
- *
- * Input: char *fileName module file name
- * int addSD 1 if module samples should be added to
- * the current Sound Device, 0 if not
- * int (*SampleCallback)(...) pointer to callback function that
- * will be called after sample has been
- * added to Sound Device, but before
- * sample data is deallocated
- * mpModule **module pointer to GMP module pointer
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpLoadMOD(char *fileName, int addSD, int
- (CALLING *SampleCallback)(sdSample *sdsmp, gmpSample *gmpsmp),
- gmpModule **_module);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpGetInformation(gmpPlayHandle playHandle,
- * gmpInformation **information);
- *
- * Description: Reads current playing status on a playing handle
- *
- * Input: gmpPlayHandle playHandle playing handle
- * gmpInformation **information pointer to pointer to
- * information structure
- *
- * Returns: MIDAS error code. Pointer to GMP information structure filled
- * is written to *information.
- *
- \****************************************************************************/
-
- int CALLING gmpGetInformation(gmpPlayHandle playHandle,
- gmpInformation **information);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetTempo(unsigned tempo)
- *
- * Description: Changes current playing tempo. GMP internal use only. Updates
- * Sound Device and UpdRateFunct() update rates as necessary.
- *
- * Input: unsigned tempo new tempo in beats per minute
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int gmpSetTempo(unsigned tempo);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpNotePeriod(unsigned note, unsigned *period)
- *
- * Description: Converts a note number to a period value (both depend on
- * current playing mode). Uses *gmpChan and *gmpPlayModule to
- * get sample tuning values. GMP internal.
- *
- * Input: unsigned note note number
- * unsigned *period pointer to period value
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpNotePeriod(unsigned note, unsigned *period);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpPlayNote(unsigned period)
- *
- * Description: Starts playing a new note on channel *gmpChan with period
- * value period. GMP internal.
- *
- * Input: unsigned period period value for new note
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpPlayNote(unsigned period);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpPeriodRate(unsigned period, ulong *rate)
- *
- * Description: Converts a period value to sampling rate, depending on current
- * playing mode. GMP internal.
- *
- * Input: unsigned period period number
- * ulong *rate pointer to sampling rate
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int gmpPeriodRate(unsigned period, ulong *rate);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetPeriod(unsigned period)
- *
- * Description: Sets the playing period on current channel. Updates the
- * value in *gmpChan and sets it to Sound Device, taking
- * current period limits into account.
- *
- * Input: unsigned period new period value
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpSetPeriod(unsigned period);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpChangePeriod(unsigned period)
- *
- * Description: Changes the playing period on current channel. Sets the new
- * value to Sound Device, but does NOT update channel structure.
- *
- * Input: unsigned period new period value
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpChangePeriod(unsigned period);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetVolume(int volume)
- *
- * Description: Sets the playing volume on current channel. Sets the volume
- * to Sound Device and updates the channel structure, taking
- * current volume limits into account
- *
- * Input: int volume new playing volume (signed to allow
- * easier limit checking)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpSetVolume(int volume);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpChangeVolume(int volume)
- *
- * Description: Changes the playing volume on current channel. Sets the
- * volume to taking current volume limits into account, but
- * does NOT update channel structures.
- *
- * Input: int volume new playing volume (signed to allow
- * easier limit checking)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpChangeVolume(int volume);
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetPanning(int panning)
- *
- * Description: Sets the panning of current channel. Sets the panning
- * to Sound Device and updates the channel structure, taking
- * current panning limits into account
- *
- * Input: int panning new panning
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpSetPanning(int panning);
-
-
- /****************************************************************************\
- *
- * Function: int gmpNewNote(void)
- *
- * Description: Plays the new note on the current channel
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpNewNote(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpLoadXM(char *fileName, int addSD, mpModule **module)
- *
- * Description: Loads a Fasttracker 2 module to memory in Generic Module
- * Player module format
- *
- * Input: char *fileName module file name
- * int addSD 1 if module samples should be added to
- * the current Sound Device, 0 if not
- * int (*SampleCallback)(...) pointer to callback function that
- * will be called after sample has been
- * added to Sound Device, but before
- * sample data is deallocated
- * mpModule **module pointer to GMP module pointer
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpLoadXM(char *fileName, int addSD, int
- (CALLING *SampleCallback)(sdSample *sdsmp, gmpSample *gmpsmp),
- gmpModule **_module);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpLoadS3M(char *fileName, int addSD, mpModule **module)
- *
- * Description: Loads a Scream Tracker 3 module to memory in Generic Module
- * Player module format
- *
- * Input: char *fileName module file name
- * int addSD 1 if module samples should be added to
- * the current Sound Device, 0 if not
- * int (*SampleCallback)(...) pointer to callback function that
- * will be called after sample has been
- * added to Sound Device, but before
- * sample data is deallocated
- * mpModule **module pointer to GMP module pointer
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpLoadS3M(char *fileName, int addSD, int
- (CALLING *SampleCallback)(sdSample *sdsmp, gmpSample *gmpsmp),
- gmpModule **_module);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetVolCommand(void)
- *
- * Description: Runs tick-0 volume column command for current channel (FT2)
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpSetVolCommand(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpRunVolCommand(void)
- *
- * Description: Runs continuous volume column command for current channel
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int gmpRunVolCommand(void);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetSyncCallback(void (CALLING *musicSync)(unsigned syncNum, unsigned position, unsigned row))
- *
- * Description: Sets music synchronization callback function. This function
- * will be called when the music synchronization command (command
- * W in FT2 and ST3) is encountered in the music. The function
- * receives as arguments the synchronization command infobyte,
- * current playing position position and current row number.
- * Note that the function will be called INSIDE THE PLAYER
- * TIMER INTERRUPT and thus SS != DS !!!
- *
- * Input: gmpPlayHandle playHandle playing handle
- * void (CALLING *SyncCallback)() Pointer to music
- * synchronization callback function.
- * Set to NULL to disable callback
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpSetSyncCallback(gmpPlayHandle playHandle,
- void (CALLING *SyncCallback)(unsigned syncNum, unsigned position,
- unsigned row));
-
-
-
-
- /****************************************************************************\
- *
- * Function: int gmpSetPosition(gmpPlayHandle playHandle, unsigned
- * newPosition);
- *
- * Description: Changes song playing position.
- *
- * Input: gmpPlayHandle playHandle playing handle
- * unsigned newPosition new playing position
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING gmpSetPosition(gmpPlayHandle playHandle, int newPosition);
-
-
-
-
- /****************************************************************************\
- * Global variables used by all GMP modules:
- \****************************************************************************/
-
-
- extern SoundDevice * GLOBALVAR gmpSD; /* Sound Device used by GMP */
- extern gmpChannel * GLOBALVAR gmpChan; /* current GMP channel */
- extern unsigned GLOBALVAR gmpTempo; /* GMP playing tempo (global for
- all songs) */
- extern unsigned GLOBALVAR gmpPlayMode; /* current playing mode */
- extern gmpPlayHandle GLOBALVAR gmpHandle; /* current playing handle */
- extern gmpModule * GLOBALVAR gmpCurModule; /* current playing module */
-
-
-
-
- /****************************************************************************\
- * Command pointer tables:
- \****************************************************************************/
-
- /* Protracker playing mode tick-0 commands: */
- extern int GLOBALVAR (*gmpTick0CommandsPT[])(unsigned infobyte);
-
- /* Protracker playing mode continuous commands: */
- extern int GLOBALVAR (*gmpContCommandsPT[gmpNumCommands])(unsigned infobyte);
-
- /* Fasttracker 2 playing mode tick-0 commands: */
- extern int GLOBALVAR (*gmpTick0CommandsFT2[])(unsigned infobyte);
-
- /* Fasttracker 2 playing mode continuous commands: */
- extern int GLOBALVAR (*gmpContCommandsFT2[gmpNumCommands])(unsigned infobyte);
-
- /* Screamtracker 3 playing mode tick-0 commands: */
- extern int GLOBALVAR (*gmpTick0CommandsST3[])(unsigned infobyte);
-
- /* Screamtracker 3 playing mode continuous commands: */
- extern int GLOBALVAR (*gmpContCommandsST3[gmpNumCommands])(unsigned infobyte);
-
-
-
- #ifdef __cplusplus
- }
- #endif
-
-
-
-
-
-
-
- /****************************************************************************\
- * enum gmpFunctIDs
- * ----------------
- * Description: ID numbers for Generic Module Player
- \****************************************************************************/
-
- enum gmpFunctIDs
- {
- ID_gmpInit = ID_gmp,
- ID_gmpClose,
- ID_gmpSetUpdRateFunct,
- ID_gmpPlaySong,
- ID_gmpStopSong,
- ID_gmpPlay,
- ID_gmpSetTempo,
- ID_gmpPlayPattern,
- ID_gmpHandleCommands,
- ID_gmpNotePeriod,
- ID_gmpPlayNote,
- ID_gmpPeriodRate,
- ID_gmpFreeModule,
- ID_gmpLoadMOD,
- ID_gmpSetPeriod,
- ID_gmpChangePeriod,
- ID_gmpSetVolume,
- ID_gmpChangeVolume,
- ID_gmpNewNote,
- ID_gmpLoadXM,
- ID_gmpRunEnvelopes,
- ID_gmpLoadS3M,
- ID_gmpSetPanning,
- ID_gmpSetSyncCallback
- };
-
-
-
- #endif
-
-
- /*
- * $Log: gmplayer.h,v $
- * Revision 1.9 1996/10/06 16:48:10 pekangas
- * Fixed a overflow problem in panning
- *
- * Revision 1.8 1996/09/01 18:33:34 pekangas
- * Added GMP_NUM_COMMANDS #define, hack for Watcom C 10.0
- *
- * Revision 1.7 1996/09/01 15:41:43 pekangas
- * Changed command handling for FT2 and splitted some slides in two commands
- *
- * Revision 1.6 1996/07/13 20:01:05 pekangas
- * Changed gmpInstrument.numsamples to unsigned
- *
- * Revision 1.5 1996/07/13 19:41:13 pekangas
- * Eliminated Visual C warnings
- *
- * Revision 1.4 1996/07/13 18:04:50 pekangas
- * Fixed to compile with Visual C
- *
- * Revision 1.3 1996/05/24 16:59:11 pekangas
- * Fixed to work with Watcom C again - using EMPTYARRAY
- *
- * Revision 1.2 1996/05/24 16:20:36 jpaana
- * Fixed to work with gcc
- *
- * Revision 1.1 1996/05/22 20:49:33 pekangas
- * Initial revision
- *
- */